package com.kexio.dynamic.datasource.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 强制主库注解
 * 
 * 标记在方法或类上，强制使用主库（写库）
 * 
 * 使用示例：
 * <pre>
 * &#64;Master
 * public void saveUser(User user) {
 *     // 这个方法强制使用主库
 * }
 * 
 * &#64;Master
 * &#64;Transactional
 * public void updateUserStatus(Long userId, String status) {
 *     // 事务操作，使用主库
 * }
 * </pre>
 * 
 * @author Kexio
 * @since 1.0.0
 */
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@DS(type = DS.DSType.MASTER, force = true)
public @interface Master {

    /**
     * 描述信息
     */
    String description() default "强制使用主库";

    /**
     * 失败策略
     */
    DS.FailureStrategy onFailure() default DS.FailureStrategy.THROW_EXCEPTION;
}
